WebSocket একটি শক্তিশালী প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে দুই-দিকে ডেটা স্ট্রিমিং এবং কমিউনিকেশন এর জন্য ব্যবহৃত হয়। এটি HTTP প্রোটোকলের উপর ভিত্তি করে, কিন্তু একবার কানেকশন স্থাপন হয়ে গেলে, এটি একটি persistent connection তৈরি করে যা দুইটি পক্ষের মধ্যে দুই-দিকে যোগাযোগ করতে দেয়।
Spring Boot-এ WebSocket ক্লায়েন্ট তৈরি করার জন্য, আমরা Spring WebSocket এবং Stomp protocol ব্যবহার করতে পারি, যা real-time messaging সমর্থন করে।
Step-by-Step WebSocket Client Integration in Spring Boot
Step 1: প্রয়োজনীয় ডিপেন্ডেন্সি যোগ করা
pom.xml ফাইলে WebSocket ক্লায়েন্টের জন্য প্রয়োজনীয় ডিপেন্ডেন্সি যোগ করুন:
<dependencies>
<!-- Spring WebSocket -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!-- Spring WebSocket STOMP (Simple Text Oriented Messaging Protocol) -->
<dependency>
<groupId>org.springframework.messaging</groupId>
<artifactId>spring-messaging</artifactId>
</dependency>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
Step 2: WebSocket Configuration (Server Side)
Spring Boot WebSocket সার্ভার কনফিগারেশন তৈরি করুন:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.handler.TextWebSocketHandler;
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new WebSocketHandler(), "/ws").setAllowedOrigins("*");
}
private static class WebSocketHandler extends TextWebSocketHandler {
@Override
public void handleTextMessage(org.springframework.web.socket.WebSocketSession session, org.springframework.web.socket.TextMessage message) throws Exception {
// Handling WebSocket message
session.sendMessage(new org.springframework.web.socket.TextMessage("Hello, " + message.getPayload()));
}
}
}
এখানে, আমরা /ws এ WebSocket কানেকশন খুলেছি, এবং TextWebSocketHandler ব্যবহার করে একটি সিম্পল মেসেজ হ্যান্ডলিং ফাংশন তৈরি করেছি।
Step 3: WebSocket Client Configuration
WebSocket ক্লায়েন্ট কনফিগারেশন তৈরি করার জন্য, আমরা StompSession এবং WebSocketStompClient ব্যবহার করব। Stomp (Simple Text Oriented Messaging Protocol) হলো একটি প্রোটোকল যা WebSocket এর উপর টেক্সট মেসেজ আদান-প্রদান সমর্থন করে।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.stomp.StompSessionHandlerAdapter;
import org.springframework.messaging.simp.stomp.StompSession;
import org.springframework.messaging.simp.stomp.StompHeaders;
import org.springframework.messaging.simp.stomp.StompClient;
import org.springframework.web.socket.client.WebSocketClient;
import org.springframework.web.socket.client.WebSocketStompClient;
import org.springframework.web.socket.WebSocketStompClient;
import org.springframework.web.socket.client.WebSocketHttpHeaders;
import org.springframework.web.socket.client.StandardWebSocketClient;
@Configuration
public class WebSocketClientConfig {
@Bean
public WebSocketStompClient stompClient() {
WebSocketClient webSocketClient = new StandardWebSocketClient();
return new WebSocketStompClient(webSocketClient);
}
}
Step 4: WebSocket Client Integration
এখন, একটি WebSocket ক্লায়েন্ট তৈরি করব, যা স্টাম্প সার্ভারে সংযোগ করবে এবং মেসেজ পাঠাবে এবং গ্রহণ করবে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.stomp.StompSession;
import org.springframework.messaging.simp.stomp.StompSessionHandler;
import org.springframework.messaging.simp.stomp.StompFrameHandler;
import org.springframework.messaging.simp.stomp.StompHeaders;
import org.springframework.web.socket.client.WebSocketStompClient;
import org.springframework.stereotype.Service;
import org.springframework.messaging.simp.stomp.StompSession;
@Service
public class WebSocketClientService {
@Autowired
private WebSocketStompClient stompClient;
public void connectToWebSocket() {
String url = "ws://localhost:8080/ws";
stompClient.connect(url, new StompSessionHandlerAdapter() {
@Override
public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
System.out.println("WebSocket connected");
session.send("/app/hello", "Hello, WebSocket!");
session.subscribe("/topic/greetings", new StompFrameHandler() {
@Override
public Type getPayloadType(StompHeaders headers) {
return String.class;
}
@Override
public void handleFrame(StompHeaders headers, Object payload) {
System.out.println("Received message: " + payload);
}
});
}
});
}
}
এখানে, StompSessionHandler ব্যবহার করা হয়েছে WebSocket সার্ভারের সাথে সংযোগ স্থাপন করার জন্য এবং মেসেজ পাঠানোর জন্য। আমরা একটি বার্তা পাঠাচ্ছি /app/hello এবং এর পর থেকে /topic/greetings এ সিস্টেম থেকে মেসেজ গ্রহণ করছি।
Step 5: Client Request থেকে WebSocket কল করা
Spring Boot অ্যাপ্লিকেশন চলাকালে WebSocket ক্লায়েন্ট কল করার জন্য:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class AppRunner implements CommandLineRunner {
@Autowired
private WebSocketClientService webSocketClientService;
@Override
public void run(String... args) throws Exception {
webSocketClientService.connectToWebSocket();
}
}
এখন, যখন Spring Boot অ্যাপ্লিকেশন চালু হবে, এটি WebSocket সার্ভারে সংযোগ করবে এবং মেসেজ পাঠাবে এবং গ্রহণ করবে।
Step 6: Testing
আপনার WebSocket সার্ভার এবং ক্লায়েন্ট দুইটি চালু করে পরীক্ষা করুন:
- WebSocket Server: WebSocket সার্ভারটি
/wsURL এ ক্লায়েন্টের কানেকশন গ্রহণ করবে এবং বার্তা পাঠাবে। - WebSocket Client: ক্লায়েন্টটি
/wsএ সংযোগ করবে এবং বার্তা পাঠাবে। সার্ভার থেকে রেসপন্স পেলে তা কনসোলে প্রিন্ট হবে।
উপসংহার
Spring Boot ক্লায়েন্টে WebSocket ইন্টিগ্রেশন করার জন্য আমরা WebSocketStompClient ব্যবহার করেছি, যা STOMP প্রোটোকল ব্যবহার করে real-time messaging সমর্থন করে। WebSocket ক্লায়েন্ট তৈরি করা অনেক সহজ এবং এটি bi-directional communication এর সুবিধা দেয়। এই সেটআপটি বিশেষ করে chat applications, live data updates, অথবা gaming apps-এ ব্যবহৃত হয়, যেখানে real-time communication অত্যন্ত গুরুত্বপূর্ণ।
Read more